package com.ucode.cgms.service;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.ucode.cgms.mapper.CgmsCompanionCommentMapper;
import com.ucode.model.cgms.CgmsCompanionComment;
import com.ucode.model.cgms.convert.CgmsCompanionCommentConvert;
import com.ucode.model.cgms.enums.CgmsSysResultCodeEnum;
import com.ucode.model.cgms.vo.CgmsCompanionCommentVO;
import com.ucode.springboot.starter.mybatis.core.base.BaseService;
import com.ucode.tool.base.Paginator;
import com.ucode.tool.base.enums.GlobalResultCodeEnum;
import com.ucode.tool.exception.UcodeServiceException;
import com.ucode.tool.util.CollectionUtils;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 陪玩评论服务接口
 *
 * @Author: system
 * @Date: 2025/01/15 10:00
 * @Version: 1.0
 */
public interface CgmsCompanionCommentService extends BaseService<Long, CgmsCompanionComment, CgmsCompanionCommentMapper> {

    /**
     * 验证评论是否合法并返回
     *
     * @param id 评论ID
     * @return 评论对象
     */
    default CgmsCompanionComment validate(Long id) {
        if (ObjectUtil.isNull(id)) {
            throw new UcodeServiceException(GlobalResultCodeEnum.VALIDATE_FAILED);
        }
        // 验证数据是否存在
        CgmsCompanionComment comment = this.selectByPrimaryKey(id);
        if (ObjectUtil.isNull(comment) || comment.getDeltag()) {
            throw new UcodeServiceException(CgmsSysResultCodeEnum.COMPANION_COMMENT_NOT_EXISTS);
        }
        return comment;
    }


    /**
     * 根据陪玩用户ID查询评论列表
     *
     * @param companionUserId 陪玩用户ID
     * @return 评论列表
     */
    List<CgmsCompanionComment> getByCompanionUserId(Long companionUserId);

    /**
     * 根据订单ID获取评论
     *
     * @param orderId 订单ID
     * @return 评论对象
     */
    CgmsCompanionComment getByOrderId(Long orderId);
    
    /**
     * 根据订单ID获取评论VO
     *
     * @param orderId 订单ID
     * @return 评论VO对象
     */
    default CgmsCompanionCommentVO getCommentVOByOrderId(Long orderId) {
        CgmsCompanionComment comment = getByOrderId(orderId);
        return comment != null ? CgmsCompanionCommentConvert.INSTANCE.convert(comment) : null;
    }
    
    /**
     * 更新评论可见性
     *
     * @param id 评论ID
     * @param visible 是否可见
     * @return 是否更新成功
     */
    boolean updateVisible(Long id, Boolean visible);
    
    /**
     * 批量获取评论
     * 
     * @param ids 评论ID集合
     * @return 评论Map
     */
    default Map<Long, CgmsCompanionComment> getMap(Collection<Long> ids) {
        return CollUtil.isEmpty(ids) ? new HashMap<>() : CollectionUtils.convertMap(this.selectByPrimaryKeys(ids), CgmsCompanionComment::getId);
    }
    
    /**
     * 根据陪玩用户ID分页查询评论列表
     *
     * @param companionUserId 陪玩用户ID
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @return 评论分页列表
     */
    Paginator<CgmsCompanionCommentVO> pageListByCompanionUserId(Long companionUserId, Integer pageNum, Integer pageSize);
}